#include "bsp_usart.h"


static volatile hi_gpio_value led_value = HI_GPIO_VALUE0 ;

/* LED灯 GPIO初始化 */
void LED_INIT(void)
{
    
    //设置GPIO_2引脚为输出模式
    hi_gpio_init();
    /* 设置IO复用功能 */
    hi_io_set_func(HI_IO_NAME_GPIO_12 , HI_IO_FUNC_GPIO_12_GPIO);
    hi_io_set_func(HI_IO_NAME_GPIO_2 , HI_IO_FUNC_GPIO_2_GPIO);
    hi_io_set_func(HI_IO_NAME_GPIO_13 , HI_IO_FUNC_GPIO_13_GPIO);

    /* 设置IO为输出模式 */
    hi_gpio_set_dir(HI_GPIO_IDX_12, HI_GPIO_DIR_OUT);
    hi_gpio_set_dir(HI_GPIO_IDX_2, HI_GPIO_DIR_OUT);
    hi_gpio_set_dir(HI_GPIO_IDX_13, HI_GPIO_DIR_OUT);
}

/* GPIO 中断回调函数 */
void KEY_Pressed(char *arg)
{
    
    (void) arg;
    led_value = !led_value;
    hi_gpio_set_ouput_val(HI_GPIO_IDX_12,  led_value);


}


void KEY_INIT(void)
{

    /* 初始化F1按键，设置为下降沿触发中断 */
    /* 设置按键的GPIO复用功能为GPIO */
    hi_io_set_func(HI_GPIO_IDX_7,HI_IO_FUNC_GPIO_7_GPIO);
    
    /* 设置按键GPIO为输入模式 */
    hi_gpio_set_dir(HI_GPIO_IDX_7, HI_GPIO_DIR_IN);
    
    /* 设置上拉输入 */
    hi_io_set_pull(HI_GPIO_IDX_7,HI_IO_PULL_UP); 
    
    /* 设置终端回调函数 */
    //hi_gpio_register_isr_function
    /* 中断回调函数前加(gpio_isr_callback)类型转换 */
    hi_gpio_register_isr_function(HI_GPIO_IDX_7,HI_INT_TYPE_EDGE,HI_GPIO_EDGE_FALL_LEVEL_LOW,  (gpio_isr_callback)KEY_Pressed,  NULL ) ;
    //GpioRegisterIsrFunc(HI_GPIO_IDX_7,HI_INT_TYPE_EDGE,HI_GPIO_EDGE_FALL_LEVEL_LOW, KEY_Pressed, NULL) ;
}

/* 绿灯亮 */
void GreenLedOn(void)
{
    hi_gpio_set_ouput_val(HI_GPIO_IDX_12,  HI_GPIO_VALUE1) ;
    printf("GreenLedOn ! \r\n");
}

/* 绿灯灭 */
void GreenLedOff(void)
{
    hi_gpio_set_ouput_val(HI_GPIO_IDX_12,  HI_GPIO_VALUE0) ;
    printf("GreenLedOff ! \r\n");
}

/* 白灯亮 */
void WhiteLedOn(void)
{
    hi_gpio_set_ouput_val(HI_GPIO_IDX_2,  HI_GPIO_VALUE1) ;
    //printf("WhiteLedOn ! \r\n");
}

/* 白灯灭 */
void WhiteLedOff(void)
{
    hi_gpio_set_ouput_val(HI_GPIO_IDX_2,  HI_GPIO_VALUE0) ;
    //printf("WhiteLedOff ! \r\n");
}

/* 红灯亮 */
void RedLedOn(void)
{
    hi_gpio_set_ouput_val(HI_GPIO_IDX_13,  HI_GPIO_VALUE1) ;
    //printf("WhiteLedOn ! \r\n");
}

/* 红灯灭 */
void RedLedOff(void)
{
    hi_gpio_set_ouput_val(HI_GPIO_IDX_13,  HI_GPIO_VALUE0) ;
    //printf("WhiteLedOff ! \r\n");
}


/* 串口1 发送十六进制数组数据 */
void Usart_SendArray(uint8_t *buf_ptr, uint8_t len)
{
    UartWrite(WIFI_IOT_UART_IDX_1, buf_ptr, len);
}

